﻿using Ortodoctor.gridComponent;
using Ortodoctor.modelo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Ortodoctor.Funcionario
{
    public partial class CadastroFuncionario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["USUARIO"] == null)
                Response.Redirect("Login.aspx");

            modeloFuncionario model = new modeloFuncionario();
            Grid grid = new Grid(model.getAll(), "id_funcionario");
            Session["GRID_FUNCIONARIO"] = grid;

            ModeloClinica modelClinica = new ModeloClinica();
            DataTable dt = modelClinica.getAll();
            dt.DefaultView.Sort = "[cidade] ASC";
            dt = dt.DefaultView.ToTable();
            string optionsClinica = "";
            foreach (DataRow dr in dt.Rows)
            {
                optionsClinica += string.Format("<option value='{0}' > {1}</option>", dr["id_clinica"].ToString(), dr["cidade"].ToString());
            }
            optionsClinica = "<select id='clinicaSelect' style='width: 100%'>" + optionsClinica + "</select>";
            string selectClinica = "$('#clinicaSelect').replaceWith($(\"" + optionsClinica + "\"));";


            scripts.InnerHtml = "<script> " + selectClinica + "</script>";
        }

        [WebMethod]
        public static string getDados(string page, string rp, string sortname, string sortorder, string query, string qtype)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_FUNCIONARIO"]);
            grid.page = Convert.ToInt32(page);
            DataTable dt = grid.dados.Clone();

            if (string.IsNullOrEmpty(query))
            {
                int numeroItensPagina = Convert.ToInt32(rp);
                int numeroPagina = Convert.ToInt32(page);
                int inicio = numeroItensPagina * (numeroPagina - 1);

                for (int i = inicio; i < inicio + numeroItensPagina && i < grid.dados.Rows.Count; ++i)
                {
                    DataRow dr = dt.NewRow();
                    foreach (DataColumn dc in dt.Columns)
                        dr[dc.ColumnName] = grid.dados.Rows[i][dc.ColumnName];

                    dt.Rows.Add(dr);
                }
                if (dt.Rows.Count > 0)
                {
                    dt.DefaultView.Sort = sortname + " " + sortorder;
                    dt = dt.DefaultView.ToTable();
                }
            }
            else
            {
                dt = grid.dados.Copy();
                dt.DefaultView.RowFilter = string.Format("[{0}] like '%{1}%'", qtype, query);
                dt = dt.DefaultView.ToTable();
            }
            return grid.getDadosToJson(dt);
        }

        [WebMethod]
        public static string addToTable(string dados)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_FUNCIONARIO"]);
            string[] strFunc = dados.Split('|');
            DateTime p1 = new DateTime();
            try
            {
                p1 = Convert.ToDateTime(strFunc[1]);
            }
            catch (Exception e) { }

            int p = 0;
            try
            {
                p = Convert.ToInt32(strFunc[4]);
            }
            catch (Exception e) { p = 0; }

            modeloFuncionario FUNC = new modeloFuncionario();
            Componentes.Funcionario func = new Componentes.Funcionario(-1,
                                            strFunc[0],p1,strFunc[2], strFunc[3], p);
            int id_func = FUNC.insert(func);
            DataRow dr = grid.dados.NewRow();
            ModeloClinica mod = new ModeloClinica();

            dr["id_funcionario"] = id_func;
            dr["nome"] = func.Nome;
            dr["rg"] = func.Rg;
            dr["cpf"] = func.Cpf;
            dr["cidade"] = mod.getClinica(func.IDClinica).Rows[0]["cidade"];
            grid.dados.Rows.Add(dr);
            grid.total++;
            HttpContext.Current.Session["GRID_FUNCIONARIO"] = grid;
            return "adicionou";
        }

        [WebMethod]
        public static string editTable(int id, string dados)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_FUNCIONARIO"]);
            string[] strFunc = dados.Split('|');

            modeloFuncionario FUNC = new modeloFuncionario();
            Componentes.Funcionario func = new Componentes.Funcionario(id,
                                            strFunc[0],Convert.ToDateTime(strFunc[1]),strFunc[2], strFunc[3], Convert.ToInt32(strFunc[4]));
            FUNC.update(func);
            FUNC = new modeloFuncionario();
            FUNC.Log("Atualização", "Usuário " + HttpContext.Current.Session["ID_USUARIO_ACESSO"] + " - " + HttpContext.Current.Session["USUARIO"] + " fez alterações no Dentista " + id + " - " + func.Nome);

            DataRow[] drow = grid.dados.Select("[id_funcionario]="+func.IdFuncionario);
            DataRow dr = drow[0];
            ModeloClinica mod = new ModeloClinica();

            dr["nome"] = func.Nome;
            dr["rg"] = func.Rg;
            dr["cpf"] = func.Cpf;
            dr["cidade"] = mod.getClinica(func.IDClinica).Rows[0]["cidade"];
            
            HttpContext.Current.Session["GRID_FUNCIONARIO"] = grid;
            return "editou";
        }

        [WebMethod]
        public static string deleteFromTable(int id)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_FUNCIONARIO"]);
            grid.deleteFromTable(id);
            modeloFuncionario client = new modeloFuncionario();            
            String nomeDeletado = (String)client.getFuncionario(id).Rows[0]["nome"];
            client = new modeloFuncionario();
            client.delete(id);
            client = new modeloFuncionario();
            client.Log("Deleção", "Usuário " + HttpContext.Current.Session["ID_USUARIO_ACESSO"] + " - " + HttpContext.Current.Session["USUARIO"] + " deletou o Dentista " + id + " - " + nomeDeletado);

            HttpContext.Current.Session["GRID_FUNCIONARIO"] = grid;
            return "removeu";
        }

        [WebMethod]
        public static string getDataFromFunc(int id)
        {
            modeloFuncionario func = new modeloFuncionario();
            DataTable dt = func.getFuncionario(id);
            string retorno = "";

            if (dt.Rows.Count > 0)
            {
                retorno += dt.Rows[0]["nome"].ToString() + "|";
                retorno += dt.Rows[0]["data_admissao"].ToString().Split(' ')[0] + "|";
                retorno += dt.Rows[0]["cpf"].ToString() + "|";
                retorno += dt.Rows[0]["rg"].ToString() + "|";
                retorno += dt.Rows[0]["id_clinica"].ToString();
            }

            return retorno;
        }
    }
}